package br.com.infnet.projeto.bloco.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.infnet.projeto.bloco.dao.MovimentacaoDAO;
import br.com.infnet.projeto.bloco.model.Conta;
import br.com.infnet.projeto.bloco.model.Movimentacao;

public class MovimentacaoDAOImpl implements MovimentacaoDAO {

	private EntityManager entityManager;

	public MovimentacaoDAOImpl(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	public void incluir(Movimentacao movimentacao) 
	{
		entityManager.persist(movimentacao);
	}

	public Double obterValorTotalCreditos(Conta conta) 
	{
		Query query = entityManager.createQuery("select SUM(m.valor) from Movimentacao m where m.conta = :conta and tipo = 1");
		query.setParameter("conta", conta);
		
		Double valor = (Double) query.getSingleResult();
		
		return valor != null ? valor : 0;
	}

	public Double obterValorTotalDebitos(Conta conta) 
	{
		Query query = entityManager.createQuery("select SUM(m.valor) from Movimentacao m where m.conta = :conta and tipo = 0");
		query.setParameter("conta", conta);
		
		Double valor = (Double) query.getSingleResult();
		
		return valor != null ? valor : 0;
	}

	public Double obterValorTotalRendimentos(Conta conta) 
	{
		Query query = entityManager.createNativeQuery("select SUM(r.valor) from tb_rendimento r, tb_movimentacao m, tb_conta_poupanca c where c.id = :idConta and c.id = m.id_conta and m.id_conta = r.id_movimentacao");
		query.setParameter("idConta", conta.getId());
		
		Double valor = (Double) query.getSingleResult();
		
		return valor != null ? valor : 0;
	}

}
